<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
  <style>
    [v-cloak] {
      display: none;
    }
  </style>
</head>

<body style="padding-bottom: 40px;">
  <div id="app" v-cloak>
    <h3 style="margin: 25px 0 0;color: #408ad4;">
      <a style="font-size: 14px;float: right;margin-right: 20px;" target="_blank" :href="'https://aliexpress.com/item/'+productId+'.html'">去商品页面</a>
      评论分析
      <span style="color: gray;font-size: 14px;margin-left: 20px;font-weight: normal;">
        共{{totalLength}}条
      </span>
    </h3>
    <el-divider></el-divider>
    <el-tabs v-model="activeTabs" type="card">
      <!-- 按国家 -->
      <el-tab-pane label="按国家" name="country">
        <div v-show="countryFilters.timeType === '全部'" class="block"
          style="float: right;margin-right: 50px;max-height: 800px;overflow: auto;">
          <div class="radio" style="margin-bottom: 20px;">
            时间线：
            <el-radio-group v-model="countryData.reverse">
              <el-radio :label="true">倒序</el-radio>
              <el-radio :label="false">正序</el-radio>
            </el-radio-group>
          </div>
          <p style="text-align:right;font-size: 12px;padding: 0 0 10px 0;color: gray;">各个月数量，只展示近8个月</p>
          <el-timeline :reverse="!countryData.reverse">
            <el-timeline-item :color="activity.color" size="large" v-for="(activity, index) in timelineData"
              :key="index" :timestamp="activity.timestamp">
              {{activity.content}}
            </el-timeline-item>
          </el-timeline>
          <el-link @click="toggleViewFlag" style="color: 408ad4; font-size: 12px; float: right;" type="primary">看详情</el-link>
        </div>
        <el-select style="margin: 0 0 15px 15px;" v-model="countryFilters.userCountry" filterable>
          <el-option v-for="item in countrySelectionOpts" :key="item.value" :label="item.label"
            :value="item.value">
          </el-option>
        </el-select>
        <el-radio-group style="margin-left: 30px;" v-model="countryFilters.timeType">
          <el-radio-button label="全部"></el-radio-button>
          <el-radio-button label="最近6个月"></el-radio-button>
          <el-radio-button label="最近3个月"></el-radio-button>
          <el-radio-button label="最近1个月"></el-radio-button>
        </el-radio-group>
        <el-select style="margin: 0 0 15px 15px;" v-model="countryFilters.star" filterable>
          <el-option v-for="item in starSelectionOpts" :key="item.value" :label="item.label"
            :value="item.value">
          </el-option>
        </el-select>
        <span style="margin-left:20px;font-size:12px;color: gray;">共{{cData.length}}条</span>
        <el-button size="small" style="float: right;margin-right: 25px;" @click="handleCopy">复制所选评论</el-button>
        <div>
          <el-table v-show="countryFilters.userCountry === 'ALL'"
            style="width: 350px; display: inline-block; vertical-align: top; margin-right: 20px; margin-bottom: 10px;"
            max-height="500" :data="cCountryTable" fit border sortable stripe>
            <el-table-column prop="country" label="国家"></el-table-column>
            <el-table-column prop="countryCount" label="数量"></el-table-column>
            <el-table-column prop="percent" label="占比"></el-table-column>
          </el-table>
          <el-table
            style="width: 350px; display: inline-block; vertical-align: top; margin-bottom: 10px;margin-right: 20px;"
            max-height="500" :data="cShipTable" border fit sortable stripe>
            <el-table-column prop="ship" label="物流方式"></el-table-column>
            <el-table-column prop="shipCount" label="数量"></el-table-column>
            <el-table-column prop="percent" label="占比"></el-table-column>
          </el-table>
          <el-table v-if="proAttrsData.proAttrs.length"
            style="width: 350px; display: inline-block; vertical-align: top; margin-bottom: 10px;" max-height="500"
            :data="cColorTable" border fit sortable stripe>
            <el-table-column prop="color" :label="proAttrsData.proAttrs[0]"></el-table-column>
            <el-table-column prop="colorCount" label="数量"></el-table-column>
            <el-table-column prop="percent" label="占比"></el-table-column>
          </el-table>
        </div>
      </el-tab-pane>
      <!-- 按物流 -->
      <el-tab-pane label="按物流" name="ship">
        <el-select style="margin: 0 0 15px 15px;" v-model="shipFilters.activeShip" filterable>
          <el-option v-for="item in shipData.shipSelectionOpts" :key="item.value" :label="item.label"
            :value="item.value">
          </el-option>
        </el-select>
        <span style="margin-left:20px;font-size:12px;color: gray;">共{{sData.length}}条</span>
        <div>
          <el-table v-show="shipFilters.activeShip === 'ALL'"
            style="width: 400px; display: inline-block; vertical-align: top; margin-right: 20px; margin-bottom: 10px;"
            max-height="500" :data="sShipTable" fit border sortable stripe>
            <el-table-column prop="ship" label="物流方式"></el-table-column>
            <el-table-column prop="shipCount" label="数量"></el-table-column>
            <el-table-column prop="percent" label="占比"></el-table-column>
          </el-table>
          <el-table v-show="countryFilters.userCountry === 'ALL'"
            style="width: 400px; display: inline-block; vertical-align: top; margin-right: 20px; margin-bottom: 10px;"
            max-height="500" :data="sCountryTable" fit border sortable stripe>
            <el-table-column prop="country" label="国家"></el-table-column>
            <el-table-column prop="countryCount" label="数量"></el-table-column>
            <el-table-column prop="percent" label="占比"></el-table-column>
          </el-table>
        </div>
      </el-tab-pane>
      <!-- 属性详情 -->
      <el-tab-pane v-if="proAttrsData.proAttrs.length > 1" label="属性详情" name="attr">
        <el-select style="margin: 0 0 15px 15px;" v-model="proAttrsFilter.userCountry" filterable>
          <el-option v-for="item in countrySelectionOpts" :key="item.value" :label="item.label"
            :value="item.value">
          </el-option>
        </el-select>
        <span style="margin-left:20px;font-size:12px;color: gray;">共{{pData.length}}条</span>
        <div>
          <el-table
            style="width: 400px; float: left; margin-right: 20px; margin-bottom: 10px;"
            max-height="500" :data="pAttrsTable" fit border sortable stripe>
            <el-table-column prop="attr" label="属性组合"></el-table-column>
            <el-table-column prop="attrCount" label="数量"></el-table-column>
            <el-table-column prop="percent" label="占比"></el-table-column>
          </el-table>
          <div style="float: left;">
            <p>单属性分布：</p>
            <el-table
              v-for="(table, attr) in pAttrTableObj"
              style="width: 400px; display: inline-block; vertical-align: top; margin-right: 20px; margin-bottom: 10px;"
              max-height="320" :data="table" fit border sortable stripe>
              <el-table-column :prop="attr" :label="attr"></el-table-column>
              <el-table-column :prop="attr + 'Count'" label="数量"></el-table-column>
              <el-table-column prop="percent" label="占比"></el-table-column>
            </el-table>
          </div>
        </div>
      </el-tab-pane>
    </el-tabs>
    <div v-show="viewFlag" style="z-index: 2;position: fixed;width: 100%;height: 100%;left: 0;top: 0;background-color: white;">
      <el-button icon="el-icon-arrow-left" style="float:left;margin: 20px;" @click="toggleViewFlag">返回</el-button>
      <p style="color:gray;text-align: center;margin-bottom: 50px;">折线图是为了看趋势，返评有滞后性，对近期的趋势判断影响极大，需要自己主观把握</p>
      <el-select style="margin: 0 0 15px 15px;" v-model="lineFilters.userCountry" filterable>
        <el-option v-for="item in countrySelectionOpts" :key="item.value" :label="item.label"
          :value="item.value">
        </el-option>
      </el-select>
      <el-radio-group style="margin-left: 30px;" v-model="lineFilters.type">
        <el-radio-button label="按日"></el-radio-button>
        <el-radio-button label="按月"></el-radio-button>
      </el-radio-group>
      <span style="font-weight: bold; font-size: 16px;margin-left: 230px;">{{lineFilters.type === '按日' ? '最近30天' : '最近12个月'}}</span>
      <div id="main" style="width: 100%;height:600px;"></div>
    </div>
  </div>
</body>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<script src="https://cdn.jsdelivr.net/npm/echarts@5.1.2/dist/echarts.min.js"></script>
<script>
  const dict = {
    "AF": "阿富汗",
    "AL": "阿尔巴尼亚",
    "DZ": "阿尔及利亚",
    "AS": "美属萨摩亚",
    "AD": "安道尔",
    "AO": "安哥拉",
    "AI": "安圭拉",
    "AQ": "南极洲",
    "AG": "安提瓜和巴布达",
    "AR": "阿根廷",
    "AM": "亚美尼亚",
    "AW": "阿鲁巴",
    "AU": "澳大利亚",
    "AT": "奥地利",
    "AZ": "澳大拉西亚",
    "BS": "巴哈马",
    "BH": "巴林",
    "BD": "孟加拉国",
    "BB": "巴巴多斯",
    "BY": "白俄罗斯",
    "BE": "比利时",
    "BZ": "伯利兹",
    "BJ": "贝宁",
    "BM": "百慕大",
    "BT": "不丹",
    "BO": "波希米亚",
    "BA": "波黑",
    "BW": "博茨瓦纳",
    "BV": "布韦岛",
    "BR": "巴西",
    "IO": "英属印度洋领地",
    "VG": "英属维尔京群岛",
    "BN": "文莱",
    "BG": "保加利亚",
    "BF": "布基纳法索",
    "MM": "缅甸",
    "BI": "布隆迪",
    "CV": "佛得角",
    "KH": "柬埔寨",
    "CM": "喀麦隆",
    "CA": "加拿大",
    "KY": "开曼群岛",
    "CF": "中非",
    "TD": "乍得",
    "CL": "智利",
    "CN": "中国",
    "CX": "圣诞岛",
    "CC": "科科斯（基林）群岛",
    "CO": "哥伦比亚",
    "KM": "科摩罗",
    "CD": "刚果民主共和国",
    "CG": "刚果共和国",
    "CK": "库克群岛",
    "CR": "哥斯达黎加",
    "CI": "科特迪瓦",
    "HR": "克罗地亚",
    "CU": "古巴",
    "CW": "库拉索",
    "CY": "塞浦路斯",
    "CZ": "捷克",
    "DK": "丹麦",
    "DJ": "吉布提",
    "DM": "多米尼克",
    "DO": "多米尼加",
    "EC": "厄瓜多尔",
    "EG": "埃及",
    "SV": "萨尔瓦多",
    "GQ": "赤道几内亚",
    "ER": "厄立特里亚",
    "EE": "爱沙尼亚",
    "ET": "埃塞俄比亚",
    "FK": "福克兰群岛",
    "FO": "法罗群岛",
    "FJ": "斐济",
    "FI": "芬兰",
    "FR": "法国",
    "FX": "法国本土",
    "GF": "法属圭亚那",
    "PF": "法属波利尼西亚",
    "TF": "法属南部和南极领地",
    "GA": "加蓬",
    "GM": "冈比亚",
    "PS": "巴勒斯坦",
    "GE": "格鲁吉亚",
    "DE": "德国",
    "GH": "加纳",
    "GI": "直布罗陀",
    "GR": "希腊",
    "GL": "格陵兰",
    "GD": "格林纳达",
    "GP": "瓜德罗普",
    "GU": "关岛",
    "GT": "危地马拉",
    "GG": "根西",
    "GN": "几内亚",
    "GW": "几内亚比绍",
    "GY": "圭亚那",
    "HT": "海地",
    "HM": "赫德岛和麦克唐纳群岛",
    "VA": "梵蒂冈",
    "HN": "洪都拉斯",
    "HK": "中国香港",
    "HU": "匈牙利",
    "IS": "冰岛",
    "IN": "印度",
    "ID": "印尼",
    "IR": "伊朗",
    "IQ": "伊拉克",
    "IE": "爱尔兰",
    "IM": "马恩岛",
    "IL": "以色列",
    "IT": "意大利",
    "JM": "牙买加",
    "JP": "日本",
    "JE": "泽西",
    "JO": "约旦",
    "KZ": "哈萨克斯坦",
    "KE": "肯尼亚",
    "KI": "基里巴斯",
    "KP": "朝鲜",
    "KR": "韩国",
    "XK": "科索沃",
    "KW": "科威特",
    "KG": "吉尔吉斯斯坦",
    "LA": "老挝",
    "LV": "拉脱维亚",
    "LB": "黎巴嫩",
    "LS": "莱索托",
    "LR": "利比里亚",
    "LY": "利比亚",
    "LI": "列支敦士登",
    "LT": "立陶宛",
    "LU": "卢森堡",
    "MO": "中国澳门",
    "MK": "北马其顿",
    "MG": "马达加斯加",
    "MW": "马拉维",
    "MY": "马来西亚",
    "MV": "马尔代夫",
    "ML": "马里",
    "MT": "马耳他",
    "MH": "马绍尔群岛",
    "MQ": "马提尼克",
    "MR": "毛里塔尼亚",
    "MU": "毛里求斯",
    "YT": "马约特",
    "MX": "墨西哥",
    "FM": "密克罗尼西亚联邦",
    "MD": "摩尔多瓦",
    "MC": "摩纳哥",
    "MN": "蒙古",
    "ME": "黑山",
    "MS": "蒙特塞拉特",
    "MA": "摩洛哥",
    "MZ": "莫桑比克",
    "NA": "纳米比亚",
    "NR": "瑙鲁",
    "NP": "尼泊尔",
    "NL": "荷兰",
    "AN": "荷属安的列斯",
    "NC": "新喀里多尼亚",
    "NZ": "新西兰",
    "NI": "尼加拉瓜",
    "NE": "尼日尔",
    "NG": "尼日利亚",
    "NU": "纽埃",
    "NF": "诺福克岛",
    "MP": "北马里亚纳群岛",
    "NO": "挪威",
    "OM": "阿曼",
    "PK": "巴基斯坦",
    "PW": "帕劳",
    "PA": "巴拿马",
    "PG": "巴布亚新几内亚",
    "PY": "巴拉圭",
    "PE": "秘鲁",
    "PH": "菲律宾",
    "PN": "皮特凯恩群岛",
    "PL": "波兰",
    "PT": "葡萄牙",
    "PR": "波多黎各",
    "QA": "卡塔尔",
    "RE": "留尼汪",
    "RO": "罗得西亚",
    "TW": "台湾",
    "RU": "俄罗斯",
    "RW": "卢旺达",
    "BL": "圣巴泰勒米",
    "SH": "圣赫勒拿、阿森松和特里斯坦-达库尼亚",
    "KN": "圣基茨和尼维斯",
    "LC": "圣卢西亚",
    "MF": "法属圣马丁",
    "VC": "圣文森特和格林纳丁斯",
    "WS": "萨摩亚",
    "SM": "圣马力诺",
    "ST": "圣多美和普林西比",
    "SA": "沙特阿拉伯",
    "SN": "塞内加尔",
    "RS": "塞尔维亚",
    "SC": "塞舌尔",
    "SL": "塞拉利昂",
    "SG": "塞尔维亚和黑山",
    "SX": "荷属圣马丁",
    "SK": "斯洛伐克",
    "SI": "斯洛文尼亚",
    "SB": "所罗门群岛",
    "SO": "索马里",
    "ZA": "扎伊尔",
    "GS": "南乔治亚和南桑威奇群岛",
    "SS": "南苏丹",
    "ES": "西班牙",
    "LK": "斯里兰卡",
    "SD": "苏丹",
    "SR": "苏里南",
    "PM": "圣皮埃尔和密克隆",
    "SZ": "斯威士兰",
    "SE": "瑞典",
    "CH": "瑞士",
    "SY": "叙利亚",
    "TJ": "塔吉克斯坦",
    "TZ": "坦桑尼亚",
    "TH": "泰国",
    "TL": "东帝汶",
    "TG": "多哥",
    "TK": "托克劳",
    "TO": "汤加",
    "TT": "特立尼达和多巴哥",
    "TN": "突尼斯",
    "TR": "土耳其",
    "TM": "土库曼斯坦",
    "TC": "捷克斯洛伐克",
    "TV": "图瓦卢",
    "UG": "乌干达",
    "UA": "阿拉伯联合共和国",
    "AE": "阿联酋",
    "GB": "英国",
    "US": "美国",
    "UM": "美国本土外小岛屿",
    "UY": "乌拉圭",
    "UZ": "乌兹别克斯坦",
    "VU": "瓦努阿图",
    "VE": "委内瑞拉",
    "VN": "越南",
    "VI": "美属维尔京群岛",
    "WF": "瓦利斯和富图纳",
    "EH": "西撒哈拉",
    "UN": "联合国",
    "EU": "欧盟",
    "YE": "也门",
    "ZM": "赞比亚",
    "ZW": "津巴布韦",
    "WI": "西印度群岛联邦",
    "EN": "独联体",
    "YG": "南斯拉夫",
    "UR": "苏联",
    "DH": "达荷美",
    "VL": "上沃尔特"
  };

  let data = [
    {
      "userName": "L***a",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=xcv1OJtXyB4feHswjtM2CQ==&memberType=buyer",
      "userCountry": "ES",
      "star": 5,
      "color": "Gradient Orange",
      "capacity": "600ml",
      "ships_from": "Belgium",
      "logistics": "CAINIAO WAREHOUSE STANDARD SHIPPING",
      "timeNew": "01 Jun 2021 11:57",
      "feedback": "It keeps the temperature very well and very good design. Recommended",
      "photos": [
        "https://ae01.alicdn.com/kf/U2138725fc9db434488e27187ce7214eec.jpg",
        "https://ae01.alicdn.com/kf/Ud0cb2b24a8cc48c88df2cc7212d6cf70o.jpg"
      ]
    },
    {
      "userName": "E***z",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=+KYY+FQZ+kBMSL5ekFr4Mg==&memberType=buyer",
      "userCountry": "ES",
      "star": 5,
      "color": "white",
      "capacity": "450ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "23 Jun 2021 04:02",
      "feedback": "Good bottle for the gym very happy cn it, get the 450ml one is left over with it",
      "photos": [
        "https://ae01.alicdn.com/kf/Uadf2bd79d0e44c6194a2ca5a7169a1fcp.jpg"
      ]
    },
    {
      "userName": "R***R",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=V2nctrUG5tQf7PrFH06/DA==&memberType=buyer",
      "userCountry": "ES",
      "star": 5,
      "color": "police blue",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "20 Jun 2021 11:25",
      "feedback": "The bottle is fine and preserves the freshness of the water luxury. Perfect to be hydrated in summer",
      "photos": [
        "https://ae01.alicdn.com/kf/U90d11aff1d30463dab32c7ae4fa0a468o.jpg"
      ]
    },
    {
      "userName": "C***r",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=grPnil060xZK1YTElzt+ow==&memberType=buyer",
      "userCountry": "ES",
      "star": 5,
      "color": "Gradient Orange",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "27 May 2021 05:08",
      "feedback": "Very good quality. I'll buy it again.",
      "photos": [
        "https://ae01.alicdn.com/kf/Ub742085a5bc244d59b9feae222196faaE.jpg",
        "https://ae01.alicdn.com/kf/Ue6eee06b1ad94877a341d46736469023i.jpg"
      ]
    },
    {
      "userName": "C***o",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=+qJ9b5ssvX4VUPbYbR0Qaw==&memberType=buyer",
      "userCountry": "ES",
      "star": 5,
      "color": "white",
      "capacity": "450ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "20 Jun 2021 23:47",
      "feedback": "Oh, great. Fast shipping and it's very good.",
      "photos": [
        "https://ae01.alicdn.com/kf/U041b3fdd585d424f9e78ca93e9194a5ds.jpg"
      ]
    },
    {
      "userName": "C***n",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=6tSdTIYx2/Jr8Ia2Qrlapw==&memberType=buyer",
      "userCountry": "FR",
      "star": 5,
      "color": "Gradient Green",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "09 Jul 2021 02:19",
      "feedback": "Lightweight compact gradient color nice inner filter safety on the cap good protection of the lid very well packaged",
      "photos": [
        "https://ae01.alicdn.com/kf/U8541c5f741d44fc59d62142f6f3e3794l.jpg",
        "https://ae01.alicdn.com/kf/Ubc647184cf154c659d1ba0315a0a5fc6g.jpg",
        "https://ae01.alicdn.com/kf/U53ee9340fa9d445e938d06accdf4f4c4F.jpg",
        "https://ae01.alicdn.com/kf/U864f1860172a4d50a14686945da416f8s.jpg",
        "https://ae01.alicdn.com/kf/Uce7ab7a37d6d4101944b2cd827b81b09J.jpg"
      ]
    },
    {
      "userName": "B***b",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=IJ77coZErGUvczbGeFqWDg==&memberType=buyer",
      "userCountry": "RU",
      "star": 5,
      "color": "police blue",
      "capacity": "600ml",
      "ships_from": "Russian Federation",
      "logistics": "CN_OVERSEA_GD",
      "timeNew": "29 Jul 2021 02:21",
      "feedback": "Delivery in a week. The bottle itself is beautiful, light, steel as stated 316, we will try as keeps the heat",
      "photos": [
        "https://ae01.alicdn.com/kf/U0569dd672eda4abcb011fc9e3681f8cfK.jpg",
        "https://ae01.alicdn.com/kf/Ue944e5d4a2694210ade33f7a12f1eb72H.jpg",
        "https://ae01.alicdn.com/kf/U0ccc677d3c4648978c5a5caf0636cc30w.jpg",
        "https://ae01.alicdn.com/kf/U328d5666e3974f5ea048d644e8c9ff75a.jpg",
        "https://ae01.alicdn.com/kf/U96cbee0f92834234a89b4d88b2c277aer.jpg"
      ]
    },
    {
      "userName": "J***z",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=XieTjMWPxc4f7PrFH06/DA==&memberType=buyer",
      "userCountry": "ES",
      "star": 5,
      "color": "Green Pink",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "14 Jun 2021 01:19",
      "feedback": "Perfect quality great price",
      "photos": [
        "https://ae01.alicdn.com/kf/U6b1f44a031ff4134bf5b54135ac35be55.jpg"
      ]
    },
    {
      "userName": "A***s",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=N5JYb5gkqg3fitNuoj/s9w==&memberType=buyer",
      "userCountry": "BR",
      "star": 5,
      "color": "police blue",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "14 Jul 2021 11:42",
      "feedback": "Bottle very beautiful\nArrived I 12 working days.\nThanks to the seller.",
      "photos": [
        "https://ae01.alicdn.com/kf/Udeba7e7f7c87489c875b6215cc450399D.jpg",
        "https://ae01.alicdn.com/kf/U954a1b780c2047328137f238820f3eefc.jpg",
        "https://ae01.alicdn.com/kf/U14cef38f3af243d3b6dd5a104edfbd668.jpg",
        "https://ae01.alicdn.com/kf/U14be0cfca7c84ffda856ea70bea121e6E.jpg"
      ]
    },
    {
      "userName": "W***a",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=wybnn4RozJjWYSLv0SVZ9A==&memberType=buyer",
      "userCountry": "BR",
      "star": 5,
      "color": "police blue",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "05 Aug 2021 14:22",
      "feedback": "Exactly as described, the workmanship is excellent and the seal also (not leave no drop), besides having arrive. Just test with cold water for more than 4 hours and the water remains very cold, will make more tests and post as additional feedback. But the product is great, recommend!",
      "photos": [
        "https://ae01.alicdn.com/kf/U806a33cf28cf4e3584b36661f7d5d8a80.jpg",
        "https://ae01.alicdn.com/kf/U208609d24a2e43d98def7eb7875227e4G.jpg",
        "https://ae01.alicdn.com/kf/U439f6225535244ab81e4381f505a5dd9d.jpg",
        "https://ae01.alicdn.com/kf/U81194ded77554dfd9952c54b6981fe69w.jpg"
      ]
    },
    {
      "userName": "N***A",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=5f+cbPk4SrXWYSLv0SVZ9A==&memberType=buyer",
      "userCountry": "FR",
      "star": 5,
      "color": "Gradient Green",
      "capacity": "600ml",
      "ships_from": "Belgium",
      "logistics": "CAINIAO WAREHOUSE STANDARD SHIPPING",
      "timeNew": "17 Apr 2021 08:13",
      "feedback": "Received in 3 days, good quality to see after use",
      "photos": [
        "https://ae01.alicdn.com/kf/Ua4e18a33d3d84750b00de245484992a95.jpg",
        "https://ae01.alicdn.com/kf/U4342f8c8c707478590cffa62a4d0c7d0W.jpg",
        "https://ae01.alicdn.com/kf/U7f211d210a904c809dbaa689b8770d950.jpg",
        "https://ae01.alicdn.com/kf/U05d6363a499e48038bd7237393e727acA.jpg",
        "https://ae01.alicdn.com/kf/U626b74e407c6458391411d06e7d66e80C.jpg"
      ]
    },
    {
      "userName": "F***r",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=fnVN8d3bwSQOxR4K4zdwOA==&memberType=buyer",
      "userCountry": "FR",
      "star": 5,
      "color": "Gradient Orange",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "26 Apr 2021 05:31",
      "feedback": "Excellent bottle in its design. I can put ice cubes in it thanks to its large opening. The spring cap is very practical but I find that the opening is small for drinking. I have not tested the performance of the insulator on a hot drink yet. The tea filter is not very convenient to put back in place but we still get there. So at the global 4 stars for the defect of the orifice for drinking and the tea filter not very praruque. I still recommend for its capacity and good design.",
      "photos": [
        "https://ae01.alicdn.com/kf/U942c4fdbb0564ea1b300db1fe4834ac6r.jpg",
        "https://ae01.alicdn.com/kf/U2cbd2257a54e46f280740de62b294f9br.jpg",
        "https://ae01.alicdn.com/kf/Ubdf0ba33827348d49f5a2d00a8d4c4bfN.jpg",
        "https://ae01.alicdn.com/kf/Uad5c37d27d5a4c4d9617730e8fd4d6edF.jpg",
        "https://ae01.alicdn.com/kf/U3ef0b86cd9ac49efad44a2b25c737db1v.jpg"
      ]
    },
    {
      "userName": "",
      "userCountry": "TR",
      "star": 5,
      "color": "Gradient Green",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "11 Jul 2021 08:05",
      "feedback": "<2en> Super always like 1 number quality keeps more than 20 hours hot boiling Super always like 1 number quality keeps more than 20 hours hot boiling",
      "photos": [
        "https://ae01.alicdn.com/kf/U69809ec6d6b045628f57c99424550b317.jpg",
        "https://ae01.alicdn.com/kf/Ud11b0e312a1d4cd09a217566840eaf33h.jpg",
        "https://ae01.alicdn.com/kf/U2cd32e14f7174ec483de24495bc6130cA.jpg",
        "https://ae01.alicdn.com/kf/U37bfcdf506e641a586d36e96d4086885k.jpg",
        "https://ae01.alicdn.com/kf/U0564486348124d9dac1e66a384b83366B.jpg"
      ]
    },
    {
      "userName": "P***z",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=Oy4uPu0aXhI8OlaUP1Bvtw==&memberType=buyer",
      "userCountry": "ES",
      "star": 5,
      "color": "police blue",
      "capacity": "450ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "18 May 2021 12:09",
      "feedback": "Perfect. Fair size. Keeps good value and cold.",
      "photos": []
    },
    {
      "userName": "A***z",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=zfrXr2QQfZwf7PrFH06/DA==&memberType=buyer",
      "userCountry": "ES",
      "star": 5,
      "color": "army green",
      "capacity": "450ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "15 Jul 2021 06:42",
      "feedback": "Good quality although the closure doesn't suit me much, it doesn't look like it's going to last too long, the aesthetic I like very much.",
      "photos": []
    },
    {
      "userName": "H***J",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=Cr5nWKcbDBhED/lyya86yw==&memberType=buyer",
      "userCountry": "FR",
      "star": 5,
      "color": "police blue",
      "capacity": "600ml",
      "ships_from": "Belgium",
      "logistics": "CAINIAO WAREHOUSE STANDARD SHIPPING",
      "timeNew": "17 Apr 2021 06:12",
      "feedback": "Ultra fast delivery, product conform to description",
      "photos": [
        "https://ae01.alicdn.com/kf/U2d8d05e946ec45c5bdf29f2da0c3821fR.jpg",
        "https://ae01.alicdn.com/kf/Uc45eee2afb164532a1dd99834e2d1fd7R.jpg",
        "https://ae01.alicdn.com/kf/U0b1c0312dd2a43f7bf6ffc4975ed67fcV.jpg"
      ]
    },
    {
      "userName": "J***e",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=/hFv9zId8/zfitNuoj/s9w==&memberType=buyer",
      "userCountry": "ES",
      "star": 5,
      "color": "army green",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "02 Aug 2021 05:39",
      "feedback": "Great, all very well. I have already bought four and excellent quality. Unbeatable offer price. Very satisfied to +++",
      "photos": []
    },
    {
      "userName": "",
      "userCountry": "FR",
      "star": 5,
      "color": "Gradient Green",
      "capacity": "600ml",
      "ships_from": "Belgium",
      "logistics": "CAINIAO WAREHOUSE STANDARD SHIPPING",
      "timeNew": "17 Apr 2021 02:04",
      "feedback": "Product conforms to the description, neat packaging and nice color! It remains to test its effectiveness.\n\nReceived in 4 days (from France to France).",
      "photos": [
        "https://ae01.alicdn.com/kf/U99f925a4e6af49bcab731d07a5d615f99.jpg",
        "https://ae01.alicdn.com/kf/Uc9d64a07bb8f4eaaa18904ecbc1f04c1k.jpg",
        "https://ae01.alicdn.com/kf/Ud9ce6e537cc744c1b0b054343283392bL.jpg"
      ]
    },
    {
      "userName": "W***w",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=nbj4umqSjIq8zhxrNJhreg==&memberType=buyer",
      "userCountry": "IT",
      "star": 5,
      "color": "Gradient Orange",
      "capacity": "600ml",
      "ships_from": "Belgium",
      "logistics": "CAINIAO WAREHOUSE STANDARD SHIPPING",
      "timeNew": "29 Apr 2021 11:40",
      "feedback": "Aesthetically really eye-catching, inter alia the cap goes great with the color black/orange.\nAppropriate size (it is not too big) and good sealing temperature.\nThe cap is comfortable and looks done well, there are no tolerances, it has good seals and systems snap because it doesn't open inopinatamente.\nUnfortunately riempiendola with sparkling water seal does not prevent a little liquid out (just filled, when it is full).\nThe rest there is no that's hope that the joints locking systems are solid and resistano in time. I saw that you find the replacement but not costs little.\nThe board, make its work and its shape",
      "photos": [
        "https://ae01.alicdn.com/kf/Ueb8c7686f10d479eb11eeee22b74d38cF.jpg",
        "https://ae01.alicdn.com/kf/U7e5cd136e3844764a30a9378bc704b1b7.jpg",
        "https://ae01.alicdn.com/kf/Ud68f13d6355c4e6bb066559a9d987695p.jpg"
      ]
    },
    {
      "userName": "S***v",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=lByGNrBlsExMSL5ekFr4Mg==&memberType=buyer",
      "userCountry": "RU",
      "star": 5,
      "color": "Gradient Orange",
      "capacity": "600ml",
      "ships_from": "Russian Federation",
      "logistics": "CN_OVERSEA_GD",
      "timeNew": "29 Jul 2021 11:33",
      "feedback": "For good I have not checked yet, but the feeling that it will not be quite like a thermos... Ie. It won't keep the drinks hot. As the bottle for bike with such function, good. But the price is too high. Material is good. Shake strongly with boiling water do not recommend, a little there is a leak. That's what I got for the first day. Let's see what happens next, how it will show itself",
      "photos": [
        "https://ae01.alicdn.com/kf/U8826a1eb9efc42499546bdbc806870f8T.jpg",
        "https://ae01.alicdn.com/kf/U7ff7805733cd4937820df84b7afec643R.jpg"
      ]
    },
    {
      "userName": "A***o",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=QzjB32BHwNhxliaTSxqqqg==&memberType=buyer",
      "userCountry": "ES",
      "star": 5,
      "color": "Gradient Orange",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "07 Apr 2021 12:37",
      "feedback": "Very practical and pretty. The black and orange. Light and comfortable. I don't know if I catch smells in time, but very happy with my purchase.",
      "photos": []
    },
    {
      "userName": "E***e",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=fRhtiFYini3WYSLv0SVZ9A==&memberType=buyer",
      "userCountry": "RU",
      "star": 5,
      "color": "police blue",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "22 Apr 2021 08:03",
      "feedback": "The parcel came in 8 days.\nBottle thermos good quality, came in a box factory and in a packing box, all whole.\nThe order is satisfied!\nThank you!",
      "photos": [
        "https://ae01.alicdn.com/kf/Ue1c5f1581d574724a1e705bc178a6452U.jpg",
        "https://ae01.alicdn.com/kf/U3483ee1aa2cd4241a2b660bb91fa0267S.jpg"
      ]
    },
    {
      "userName": "J***A",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=/GjF3M/CqpbXVUpEw11B1w==&memberType=buyer",
      "userCountry": "ES",
      "star": 5,
      "color": "army green",
      "capacity": "600ml",
      "ships_from": "Belgium",
      "logistics": "CAINIAO WAREHOUSE STANDARD SHIPPING",
      "timeNew": "18 Mar 2021 04:31",
      "feedback": "Very good finishes. -Pretty light thermos-good packing. -Excellent value for money",
      "photos": []
    },
    {
      "userName": "G***a",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=MTHM5a5JxVTXVUpEw11B1w==&memberType=buyer",
      "userCountry": "RU",
      "star": 5,
      "color": "army green",
      "capacity": "600ml",
      "ships_from": "Russian Federation",
      "logistics": "CN_OVERSEA_GD",
      "timeNew": "28 Jul 2021 03:10",
      "feedback": "I took it for work, it's very convenient, I filled the welding with lemon and drink, the sieve delays the contents, about keeping the heat boiled holds hours 6",
      "photos": [
        "https://ae01.alicdn.com/kf/Ue23a709b64ef4030aeadf2908575ef93w.jpg"
      ]
    },
    {
      "userName": "",
      "userCountry": "ES",
      "star": 5,
      "color": "Gradient Orange",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "21 May 2021 02:56",
      "feedback": "As described. Order placed on 9 May and received on 21 May. Fully advisable seller.",
      "photos": []
    },
    {
      "userName": "",
      "userCountry": "ES",
      "star": 5,
      "color": "Gradient Orange",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "09 Jun 2021 12:58",
      "feedback": "Keep the cold drinks long enough, hot I haven't tried. I bought another one again.",
      "photos": []
    },
    {
      "userName": "S***n",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=HRrXZNuE81Y8OlaUP1Bvtw==&memberType=buyer",
      "userCountry": "FR",
      "star": 5,
      "color": "Gradient Blue",
      "capacity": "600ml",
      "ships_from": "Belgium",
      "logistics": "CAINIAO WAREHOUSE STANDARD SHIPPING",
      "timeNew": "23 Apr 2021 08:00",
      "feedback": "Beautiful bottle & good quality bottle. It is same as in the picture & functions very well. Keep hot & cool. Fast shipping & thanks seller.",
      "photos": [
        "https://ae01.alicdn.com/kf/U7248d0249d374d108fe7a9c7dbe2bb86n.jpg",
        "https://ae01.alicdn.com/kf/U5fc09b78b9514b40b090f4d76dc312a0w.jpg"
      ]
    },
    {
      "userName": "",
      "userCountry": "ES",
      "star": 5,
      "color": "army green",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "14 Jun 2021 06:37",
      "feedback": "Perfect, very good quality. Bought on sale at half price.",
      "photos": []
    },
    {
      "userName": "",
      "userCountry": "ES",
      "star": 5,
      "color": "Gradient Blue",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "14 Jun 2021 14:25",
      "feedback": "Perfect bottle, very good quality and practice, I am very happy with the purchase!",
      "photos": []
    },
    {
      "userName": "L***Z",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=7NFMMtcWmT8feHswjtM2CQ==&memberType=buyer",
      "userCountry": "ES",
      "star": 5,
      "color": "Gradient Pink",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "11 Jul 2021 11:32",
      "feedback": "Good quality and attractive design. Keeps water fresh for hours",
      "photos": []
    },
    {
      "userName": "K***i",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=ArVXmU9k1xxED/lyya86yw==&memberType=buyer",
      "userCountry": "SG",
      "star": 5,
      "color": "police blue",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "08 Jul 2021 06:23",
      "feedback": "Product is good quality. As described. Not too bulky. Just nice.",
      "photos": [
        "https://ae01.alicdn.com/kf/U99e3cd5b4eb94878addacb9dad84c534M.jpg",
        "https://ae01.alicdn.com/kf/U56ab96cdfc4f4eb08779e9104ffefefbr.jpg"
      ]
    },
    {
      "userName": "J***a",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=MXi9fdeNVH4feHswjtM2CQ==&memberType=buyer",
      "userCountry": "ES",
      "star": 5,
      "color": "police blue",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "21 Jun 2021 05:30",
      "feedback": "Very good product and very fast shipping",
      "photos": []
    },
    {
      "userName": "",
      "userCountry": "ES",
      "star": 5,
      "color": "Green Pink",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "16 Jun 2021 02:22",
      "feedback": "The Thermos has very good quality and very well holds the temperature of the drinks, it has arrived very fast and everything has come well",
      "photos": []
    },
    {
      "userName": "N***a",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=+yPjtDBCIiBMSL5ekFr4Mg==&memberType=buyer",
      "userCountry": "RU",
      "star": 5,
      "color": "Gradient Green",
      "capacity": "600ml",
      "ships_from": "Russian Federation",
      "logistics": "CN_OVERSEA_GD",
      "timeNew": "23 Jun 2021 13:37",
      "feedback": "Настолько классные термосы, что остановиться невозможно. Масса расцветок, масса вариантов исполнения. На фото - мега термос с чашкой. Чашка внутри металлическая. Я такого не встречала, несмотря на большой опыт покупки термосов. Второй с лапками - просто крутой обычный термос. Третий термос бутылка. Актуален последний и в жару и в холод. Хотя они все актуальны, потому что и холод долго держат и тепло. Нереально крутые! Очень рада приобретению!",
      "photos": [
        "https://ae01.alicdn.com/kf/U76195233b0d74e19b4614dfa3bf56aed8.jpg"
      ]
    },
    {
      "userName": "E***j",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=LJZSX8d7iC95V45eHzh8mA==&memberType=buyer",
      "userCountry": "IT",
      "star": 5,
      "color": "army green",
      "capacity": "450ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "13 Apr 2021 04:49",
      "feedback": "Great product, same as description❗Beautiful, lightweight and practical. Shipped in time-efficient, perfect packaging. Seller recommended❗X☑️✴️✴️✴️",
      "photos": [
        "https://ae01.alicdn.com/kf/Uc10669babbcf47c3867e18a060ddc01dt.jpg",
        "https://ae01.alicdn.com/kf/Uc2ac90fa207a4063be695706536449c75.jpg"
      ]
    },
    {
      "userName": "K***n",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=zAQ6L3Ly0srahREyJPv7lA==&memberType=buyer",
      "userCountry": "FR",
      "star": 5,
      "color": "Gradient Orange",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "27 Apr 2021 05:53",
      "feedback": "Very good thermos of good quality good finish I highly recommend very good seller!",
      "photos": [
        "https://ae01.alicdn.com/kf/U7eaaac2b41e94793af5514bfd4e4f6020.jpg",
        "https://ae01.alicdn.com/kf/Ue927fc4a53604864918a37c410c43f4bF.jpg"
      ]
    },
    {
      "userName": "A***v",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=w+Qa3Oj28qgfeHswjtM2CQ==&memberType=buyer",
      "userCountry": "RU",
      "star": 5,
      "color": "Gradient Orange",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "21 Feb 2021 07:29",
      "feedback": "The quality is excellent. Very light. To the touch, too, class. I advise you to take",
      "photos": [
        "https://ae01.alicdn.com/kf/U26cca426f09f453aa2d5690a45f9859dM.jpg"
      ]
    },
    {
      "userName": "F***n",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=I4ttjttflvbWYSLv0SVZ9A==&memberType=buyer",
      "userCountry": "IL",
      "star": 5,
      "color": "white",
      "capacity": "450ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "20 Jul 2021 03:34",
      "feedback": "Thank you for the goods all very quickly realized",
      "photos": [
        "https://ae01.alicdn.com/kf/Ub896fadf25f74b7ca5347655df833c64K.jpg"
      ]
    },
    {
      "userName": "P***n",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=WEasCLlTXA9Rb0NpbUE+Xg==&memberType=buyer",
      "userCountry": "SK",
      "star": 5,
      "color": "Gradient Green",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "28 Jul 2021 02:09",
      "feedback": "very well made product.",
      "photos": [
        "https://ae01.alicdn.com/kf/U06e02670c383442587f9fcbeefa051270.jpg",
        "https://ae01.alicdn.com/kf/U1a1aec8bb5b04ca8921efb443ba708b9v.jpg",
        "https://ae01.alicdn.com/kf/U516b81f8e7a143318045e298d111f7fbE.jpg",
        "https://ae01.alicdn.com/kf/Uab3a36c739cf444a9a725b9f726aa312b.jpg"
      ]
    },
    {
      "userName": "T***o",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=4TFmba68bvTfitNuoj/s9w==&memberType=buyer",
      "userCountry": "BR",
      "star": 5,
      "color": "Green Pink",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "04 Jun 2021 07:58",
      "feedback": "Arrived fast and the bottle is beautiful!",
      "photos": [
        "https://ae01.alicdn.com/kf/U7456b90d09294e6995e5faa02419eec4F.jpg"
      ]
    },
    {
      "userName": "D***p",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=7v0vf9zKmsPWYSLv0SVZ9A==&memberType=buyer",
      "userCountry": "ES",
      "star": 5,
      "color": "army green",
      "capacity": "450ml",
      "ships_from": "Belgium",
      "logistics": "CAINIAO WAREHOUSE STANDARD SHIPPING",
      "timeNew": "12 May 2021 08:13",
      "feedback": "It's better than the description.",
      "photos": []
    },
    {
      "userName": "M***r",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=1Akw03xNTXHWYSLv0SVZ9A==&memberType=buyer",
      "userCountry": "MD",
      "star": 5,
      "color": "Gradient Orange",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "26 May 2021 10:09",
      "feedback": "thanks",
      "photos": [
        "https://ae01.alicdn.com/kf/U1d2da1cce54f46dba99ba41262e7725fZ.jpg",
        "https://ae01.alicdn.com/kf/Ud1732cba89f148d68acbb4a53c83c0ceq.jpg",
        "https://ae01.alicdn.com/kf/U4ab1d6bc1f2f404591cf74f819f136b7a.jpg",
        "https://ae01.alicdn.com/kf/Ud7ed8cf130164ea985784c3dc80a85f2p.jpg"
      ]
    },
    {
      "userName": "M***l",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=/X3+SwCV4WvfitNuoj/s9w==&memberType=buyer",
      "userCountry": "ES",
      "star": 5,
      "color": "police blue",
      "capacity": "450ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "16 Jun 2021 05:34",
      "feedback": "Still to try but it looks good",
      "photos": []
    },
    {
      "userName": "F***o",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=7pEHVCzaTqkvczbGeFqWDg==&memberType=buyer",
      "userCountry": "ES",
      "star": 5,
      "color": "white",
      "capacity": "450ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "18 Jun 2021 08:01",
      "feedback": "Great! I recommend! Very practical and pretty",
      "photos": []
    },
    {
      "userName": "A***s",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=of0UAj+K9CcW1k696pSYkg==&memberType=buyer",
      "userCountry": "ES",
      "star": 5,
      "color": "Green Pink",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "24 Jun 2021 03:28",
      "feedback": "Very good quality very happy with purchase",
      "photos": []
    },
    {
      "userName": "H***A",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=Mc8HVzojAgyvyKwCVkEZAg==&memberType=buyer",
      "userCountry": "MA",
      "star": 5,
      "color": "Gradient Orange",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "28 Apr 2021 06:56",
      "feedback": "Very good product, correct delivery",
      "photos": [
        "https://ae01.alicdn.com/kf/U8b1aecf51a7049cb9a0ca36873df6c1cp.jpg",
        "https://ae01.alicdn.com/kf/U3f33391bbedf423bb7c7a92068486439R.jpg"
      ]
    },
    {
      "userName": "D***r",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=p/mK9gTdc9j7/OUpuyChfQ==&memberType=buyer",
      "userCountry": "PY",
      "star": 5,
      "color": "police blue",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "03 May 2021 13:33",
      "feedback": "Excellent Product",
      "photos": [
        "https://ae01.alicdn.com/kf/Ucabfe7a578224643bd32018d4a8aa7d2S.jpg",
        "https://ae01.alicdn.com/kf/U092f291b1d084abb819ef3c5d61ae79eh.jpg"
      ]
    },
    {
      "userName": "D***o",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=SV2ERe/AY9Bgdd/D54u2EA==&memberType=buyer",
      "userCountry": "ES",
      "star": 4,
      "color": "Gradient Pink",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "08 Jul 2021 11:32",
      "feedback": "Good materials, good finishes and overall quality. Happy with the purchase, the only catch is the price, which is a little high.",
      "photos": [
        "https://ae01.alicdn.com/kf/U3a6fbdb294754ff085ae801932ca8a7fH.jpg"
      ]
    },
    {
      "userName": "E***a",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=GQTiq6pkwHBMSL5ekFr4Mg==&memberType=buyer",
      "userCountry": "BR",
      "star": 5,
      "color": "police blue",
      "capacity": "450ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "22 Mar 2021 17:31",
      "feedback": "Perfect. Recommend.",
      "photos": [
        "https://ae01.alicdn.com/kf/Ub770a54661504643a063e08437bedf8d3.jpg",
        "https://ae01.alicdn.com/kf/U9647f0a131c948ccacc887557d5b82d72.jpg"
      ]
    },
    {
      "userName": "6***r",
      "memberDetailUrl": "//feedback.aliexpress.com/display/detail.htm?ownerMemberId=K9XUORUMUG1cvwMwzWRuhQ==&memberType=buyer",
      "userCountry": "ES",
      "star": 5,
      "color": "Green Pink",
      "capacity": "600ml",
      "ships_from": "China",
      "logistics": "AliExpress Standard Shipping",
      "timeNew": "18 May 2021 08:34",
      "feedback": "Good product equal to the photo",
      "photos": []
    }
  ]

  data = data.filter(i => i.userCountry in dict);

  productId = '1005001552155488';

  function getAttrCountryDict(attrStr) {
    return function (data) {
      const result = Object.create(null);
      data.map(i => i[attrStr]).forEach(i => {
        if (i in result) {
          result[i]++;
        } else {
          result[i] = 1;
        }
      });
      return result;
    };
  }

  const getCountryCountDict = getAttrCountryDict('userCountry');
  const getShipCountDict = getAttrCountryDict('logistics');
  const getColorCountDict = getAttrCountryDict('color');

  const countrySelectionOpts = (function (data) {
    const countryCountDict = getCountryCountDict(data);
    const keys = Object.keys(countryCountDict);
    const total = Object.values(countryCountDict).reduce((p, n) => p + n);
    keys.sort((a, b) => countryCountDict[b] - countryCountDict[a]);
    const result = keys.map(i => {
      return {
        value: i,
        label: dict[i] + '\\t(' + (countryCountDict[i] * 100 / total).toFixed(2) + '%)'
      };
    });
    result.unshift({ label: '全部国家', value: 'ALL' });
    return result;
  })(data);

  const shipSelectionOpts = (function (data) {
    const shipCountDict = getShipCountDict(data);
    const keys = Object.keys(shipCountDict);
    const total = Object.values(shipCountDict).reduce((p, n) => p + n);
    keys.sort((a, b) => shipCountDict[b] - shipCountDict[a]);
    const result = keys.map(i => {
      return {
        value: i,
        label: i + '\\t(' + (shipCountDict[i] * 100 / total).toFixed(2) + '%)'
      };
    })
    result.unshift({ label: '全部物流', value: 'ALL' });
    return result;
  })(data);

  const starSelectionOpts = [
    { value: 'ALL', label: '全部星级' },
    { value: 'G', label: '好评（4-5星）' },
    { value: 'M', label: '中评（3星）' },
    { value: 'P', label: '差评（1-2星）' },
  ]

  function getProAttrs(userData = data) {
    const keys = ["userName", "memberDetailUrl", "userCountry", "star", "logistics", "timeNew", "feedback", "photos", "ships_from"];
    const list = Object.keys(userData[0]).filter(i => !keys.includes(i));
    const result = [];
    if (list.includes('color')) {
      result.push('color');
      list.splice(list.indexOf('color'), 1);
    } else if (list.includes('size')) {
      result.push('size');
      list.splice(list.indexOf('size'), 1)
    } else if (list.includes('capacity')) {
      result.push('capacity');
      list.splice(list.indexOf('capacity'), 1);
    }
    return result.concat(list);
  }

  const proAttrs = getProAttrs(data);

  function makeAttrCountDict(userData = data) {
    const result = Object.create(null);
    userData.forEach(item => {
      const valueHash = attrsValueHash(proAttrs.map(attr => item[attr]));
      if (valueHash in result) {
        result[valueHash]++;
      } else {
        result[valueHash] = 1;
      }
    })
    return result;
  }

  function attrsValueHash(attrValues) {
    return attrValues.join(' + ');
  }

  function makeTableByDict(userData = data, makeDictFn, attrStr) {
    const userDict = makeDictFn(userData);
    return Object.keys(userDict).map((i) => {
      const count = userDict[i];
      const total = Object.values(userDict).reduce((p, n) => p + n);
      return {
        [attrStr]: i,
        [attrStr + 'Count']: count,
        percent: (count * 100 / total).toFixed(2) + '%'
      };
    }).sort((a, b) => b[attrStr + 'Count'] - a[attrStr + 'Count']);
  }

  function draw(opt) {
    const userData = opt && opt.data || data;
    const type = opt && opt.type || '按日';
    const myChart = echarts.init(document.getElementById('main'));

    const now = (function () {
      const result = Object.create(null);
      const now = new Date().toDateString();
      result.month = now.slice(4, 7);
      result.date = now.slice(8, 10);
      result.year = now.slice(-4);
      result.str = result.date + ' ' + result.month + ' ' + result.year;
      return result;
    })();

    const xAxis = (function () {
      let len = 30, str = now.str;
      const result = [];
      if (type === '按日') {
        result.push(now.str);
        while (len-- > 0) {
          str = getPrevDate(str)
          result.unshift(str);
        }
      } else {
        len = 12;
        str = now.str.slice(3, 11)
        result.push(str);
        while (len-- > 0) {
          str = getPrevMonthStr(str);
          result.unshift(str);
        }
      }
      return result;
    })();

    const yAxios = (function () {
      return xAxis.map(x => {
        return userData.filter(i => i.timeNew.includes(x)).length;
      })
    })();

    const option = {
      xAxis: {
        type: 'category',
        data: xAxis,
        boundaryGap: false,
        axisLabel: {
          rotate: 30
        }
      },
      yAxis: {
        type: 'value'
      },
      series: [{
        data: yAxios,
        type: 'line',
        smooth: 0.3
      }],
      tooltip: {
        trigger: 'axis',
        axisPointer: {
          type: 'cross',
          label: {
            backgroundColor: '#6a7985'
          }
        },
      }
    };

    // 使用刚指定的配置项和数据显示图表。
    myChart.setOption(option);
  }

  function getPrevDate(str) {
    const lastMonthIsShort = ['02', '04', '06', '08', '09', '11', '01'];
    const year = str.slice(7, 11);
    const month = str.slice(3, 6);
    const date = str.slice(0, 2);
    if (Number(date) > 10) {
      return (date - 1) + ' ' + month + ' ' + year;
    } else if (Number(date) > 1) {
      return '0' + (Number(date) - 1) + ' ' + month + ' ' + year;
    } else {
      if (lastMonthIsShort.includes(month)) {
        return '31' + ' ' + getPrevMonthStr(str.slice(3, 11));
      } else if (month !== '03') {
        return '30' + ' ' + getPrevMonthStr(str.slice(3, 11));
      } else if (isLeap(year)) {
        return '28' + ' ' + getPrevMonthStr(str.slice(3, 11));
      } else {
        return '29' + ' ' + getPrevMonthStr(str.slice(3, 11));
      }
    }
  }

  function isLeap(year) {
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
  }

  function getPrevMonthStr(str) {
    const monthSort = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
    const month = str.slice(0, 3);
    if (month === 'Jan') {
      return 'Dec ' + Number(str.slice(-4) - 1);
    } else {
      return monthSort[monthSort.indexOf(month) - 1] + ' ' + str.slice(-4);
    }
  }

  new Vue({
    el: '#app',
    data() {
      return {
        viewFlag: false,
        productId,
        countryFilters: {
          userCountry: 'ALL',
          timeType: '全部',
          star: 'ALL'
        },
        countryData: {
          reverse: true,
        },
        shipFilters: {
          activeShip: 'ALL'
        },
        shipData: {
          shipSelectionOpts
        },
        activeTabs: 'country',
        countrySelectionOpts,
        starSelectionOpts,
        proAttrsData: { proAttrs },
        proAttrsFilter: {
          userCountry: 'ALL'
        },
        lineFilters: {
          userCountry: 'ALL',
          type: '按日'
        },
        lineData: {
          renderData: this.cData,
        }
      }
    },
    watch: {
      'lineFilters': {
        handler(newVal) {
          console.log(newVal.type)
          const { timeType, userCountry } = newVal;
          const data = this.filterDataBy({ userCountry: this.lineFilters.userCountry });
          draw({ data, type: newVal.type })
        },
        deep: true
      }
    },
    computed: {
      totalLength() {
        return data.length;
      },
      timelineData() {
        return this.genTimeLineData(this.cData);
      },
      cCountryTable() {
        return this.getCountryDataBy(this.cData);
      },
      cShipTable() {
        return this.getShipTableDataBy(this.cData);
      },
      cColorTable() {
        return this.getColorDataBy(this.cData);
      },
      cData() {
        return this.filterDataBy(this.countryFilters);
      },
      sCountryTable() {
        return this.getCountryDataBy(this.sData);
      },
      sShipTable() {
        return this.getShipTableDataBy(this.sData);
      },
      sData() {
        return this.filterDataBy(this.shipFilters);
      },
      pAttrsTable() {
        return this.getAttrsDataBy(this.pData);
      },
      pAttrTableObj() {
        return this.getAttrTablesObjBy(this.pData);
      },
      pData() {
        return this.filterDataBy(this.proAttrsFilter);
      }
    },
    methods: {
      getAttrTablesObjBy(userData = data) {
        const result = Object.create(null);
        proAttrs.forEach(i => {
          const table = makeTableByDict(userData, getAttrCountryDict(i), i);
          result[i] = table;
        });
        return result;
      },
      getAttrsDataBy(userData = data) {
        return makeTableByDict(userData, makeAttrCountDict, 'attr');
      },
      getCountryDataBy(userData = data) {
        return makeTableByDict(userData, getCountryCountDict, 'country').map(i => {
          i.country = dict[i.country];
          return i;
        });
      },
      getColorDataBy(userData = data) {
        return makeTableByDict(userData, getColorCountDict, 'color');
      },
      getShipTableDataBy(userData = data) {
        return makeTableByDict(userData, getShipCountDict, 'ship');
      },
      genTimeLineData(data) {
        const d = new Date();
        const MAX = 8;
        let len = d.getDate() > 9 ? MAX : MAX + 1;
        const result = [];
        const str = String(d);
        let timeStr = str.slice(4, 7) + ' ' + str.slice(11, 15);
        while (len-- > 0) {
          const num = getCountByMonth(timeStr);
          const percent = (num * 100 / data.length).toFixed(2);
          const color = percent > 80
            ? '#e35141'
            : percent > 60
              ? '#d56353'
              : percent > 40
                ? '#d87f4c'
                : percent > 20
                  ? '#eecb66'
                  : '#59b39e';
          result.push({
            content: '评论数: ' + num + '  =>  ' + percent + '%',
            timestamp: timeStr,
            color: num > 0 ? color : ''
          });
          timeStr = getPrevMonthStr(timeStr);
        }
        return result;

        function getCountByMonth(monthStr) {
          return data.filter(i => {
            return i.timeNew.slice(3, 11) === monthStr;
          }).length;
        }
      },
      handleCopy() {
        let content = '';
        if (this.activeTabs === 'country') {
          content = this.cData.map(i => i.feedback).filter(i => i).join('\\n');
        }
        const aux = document.createElement("textarea");
        aux.value = content;
        document.body.appendChild(aux);
        aux.select();
        document.execCommand("copy");
        document.body.removeChild(aux);
        this.$message({
          message: '已复制',
          type: 'success'
        });
      },
      filterDataBy(filterObj, userData = data) {
        const list = Object.keys(filterObj).filter(i => filterObj[i] !== 'ALL' && filterObj[i] !== '全部');
        let result = userData;
        if (list.includes('timeType')) {
          result = this.filterDataByTimeType(filterObj.timeType, result);
        }
        if (list.includes('userCountry')) {
          result = this.filterDataByUserCountry(filterObj.userCountry, result);
        }
        if (list.includes('activeShip')) {
          result = this.filterDataByShip(filterObj.activeShip, result);
        }
        if (list.includes('star')) {
          result = this.filterDataByStar(filterObj.star, result);
        }
        return result;
      },
      filterDataByShip(ship, userData = data) {
        return userData.filter(i => i.logistics === ship);
      },
      filterDataByStar(star, userData = data) {
        if (star === 'G') {
          return userData.filter(i => i.star >= 4);
        }
        if (star === 'P') {
          return userData.filter(i => i.star <= 2);
        }
        return userData.filter(i => i.star === 3);
      },
      filterDataByUserCountry(country, userData = data) {
        return userData.filter(i => i.userCountry === country);
      },
      filterDataByTimeType(type, userData = data) {
        let timestamp = 0, now = new Date().getTime();
        if (type === '最近6个月') {
          timestamp = now - 6 * 30 * 24 * 3600 * 1000;
        } else if (type === '最近3个月') {
          timestamp = now - 3 * 30 * 24 * 3600 * 1000;
        } else if (type === '最近1个月') {
          timestamp = now - 1 * 30 * 24 * 3600 * 1000;
        }
        return userData.filter(i => {
          return new Date(i.timeNew).getTime() - timestamp >= 0
        });
      },
      toggleViewFlag() {
        this.viewFlag = !this.viewFlag;
        if (this.viewFlag) {
          setTimeout(() => {
            draw({ data: this.lineData.renderData });
          }, 0);
        }
      }
    }
  })
</script>

</html>